import 'dotenv/config';
import express from 'express';
import cors from 'cors';
import path from 'path';
import { fileURLToPath } from 'url';
import { testConnection, syncModels } from './db/index.js';
import config from './config/mysqlconfig.js';
import mainRouter from './router/index.js';
import { initializeAdmin } from './config/initconfig.js';
import { errorHandler, notFoundHandler } from './middleware/errorHandler.js';

// ES模块中获取__dirname
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// 创建Express应用
const app = express();
const PORT = config.server.port || 3000;

// 中间件配置
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// 静态文件服务
const uploadsPath = process.env.UPLOAD_PATH || 'uploads';
app.use('/uploads', express.static(path.join(__dirname, uploadsPath)));

// 测试数据库连接
testConnection();

// 开发环境下同步数据库模型
if (process.env.NODE_ENV === 'development') {
  syncModels().then(() => {
    // 数据库同步后初始化管理员账户
    initializeAdmin();
  });
} else {
  // 生产环境直接初始化管理员账户
  initializeAdmin();
}

// 注册主路由
app.use('/api', mainRouter);

// 404错误处理 
app.use(notFoundHandler);

// 全局错误处理中间件 
app.use(errorHandler);

// 启动服务器
app.listen(PORT, () => {
  console.log(`服务器正在运行，端口: ${PORT}`);
});

export default app;
